home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / a_man / cat7 / ei.z / ei
Encoding:
Text File  |  2001-04-17  |  26.8 KB  |  529 lines

  1.  
  2.  
  3.  
  4. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ei - external interrupts interface
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      ####iiiinnnncccclllluuuuddddeeee <<<<ssssyyyyssss////eeeeiiii....hhhh>>>>
  13.      ffffdddd ==== ooooppppeeeennnn((((""""////ddddeeeevvvv////eeeexxxxtttteeeerrrrnnnnaaaallll____iiiinnnntttt////1111"""",,,, OOOO____RRRRDDDDOOOONNNNLLLLYYYY))));;;;
  14.  
  15. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  16.      The special files in /dev/external_int provide access to the external
  17.      interrupt interface on those machines which have such an interface. This
  18.      interface allows separate machines to send and receive interrupts over a
  19.      dedicated wire for purposes of inter-machine synchronization.  Using this
  20.      device, a user process may generate outgoing interrupts to other
  21.      machines, or receive interrupts from other machines in a variety of ways:
  22.      the user process may request to block in an ioctl() until an interrupt is
  23.      received; or may request that a signal be sent; or for the fastest
  24.      possible reaction time, a library call is provided to allow the process
  25.      to busy wait for an interrupt to arrive, thus avoiding syscall overhead.
  26.      The driver maintains per-process state, so any number of processes may
  27.      open this device and use it without interfering with each other.
  28.  
  29.      On systems with only one external interrupt interface, a single file
  30.      called "1" will be present in the directory /dev/external_int. On systems
  31.      with more than one external interrupt interface, the file "1" will be
  32.      guaranteed to represent the interface adjacent to the system console.
  33.      other interfaces will be named "2", "3" etc. as per the whims of
  34.      ioconfig(1).
  35.  
  36.      Some ioctls are supported only on certain systems. Such limitations are
  37.      noted in the ioctl descriptions below.
  38.  
  39. IIIIOOOOCCCCTTTTLLLLSSSS
  40.      EEEEIIIIIIIIOOOOCCCCEEEENNNNAAAABBBBLLLLEEEE
  41.           Enables incoming interrupts at the hardware level.  Interrupts are
  42.           disabled by default and must be enabled whenever the device is
  43.           opened.  This ioctl takes no arg.
  44.  
  45.      EEEEIIIIIIIIOOOOCCCCDDDDIIIISSSSAAAABBBBLLLLEEEE
  46.           Disables incoming interrupts at the hardware level.  Interrupts are
  47.           automatically disabled when the device is closed by the last
  48.           process.  This ioctl takes no arg.
  49.  
  50.      EEEEIIIIIIIIOOOOCCCCEEEENNNNAAAABBBBLLLLEEEELLLLBBBB
  51.           Enables loopback interrupt. When the local host generates an
  52.           interrupt via EIIOCSTROBE, the interrupt loops back to the local
  53.           host in addition to triggering a remote interrupt. This interrupt
  54.           requires no external cabling. This ioctl is only available on
  55.           Origin2000/200.  NOTE: see _B_U_G_S below.
  56.  
  57.      EEEEIIIIIIIIOOOOCCCCDDDDIIIISSSSAAAABBBBLLLLEEEELLLLBBBB
  58.           Disables loopback interrupt. Outgoing interrupts generated via
  59.           EIIOCSTROBE will no longer loop back to the local host. This ioctl
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  71.  
  72.  
  73.  
  74.           is only available on Origin2000/200.
  75.  
  76.      EEEEIIIIIIIIOOOOCCCCSSSSTTTTRRRROOOOBBBBEEEE
  77.           Generates an outgoing interrupt pulse. The output line is left
  78.           deasserted after this ioctl completes. See OOOOUUUUTTTTPPPPUUUUTTTT SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN below.
  79.  
  80.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTHHHHIIII
  81.           Asserts an outgoing interrupt line. The line is left asserted after
  82.           this ioctl completes.  This function should be used exclusively for
  83.           debugging purposes since leaving the external interrupt input to
  84.           another machine asserted for a long time may cause problems on the
  85.           receiving machine. See OOOOUUUUTTTTPPPPUUUUTTTT SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN below.
  86.  
  87.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTLLLLOOOO
  88.           Deasserts an outgoing interrupt line. See OOOOUUUUTTTTPPPPUUUUTTTT SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN below.
  89.  
  90.      EEEEIIIIIIIIOOOOCCCCPPPPUUUULLLLSSSSEEEE
  91.           Begin cyclical pulse generation. The hardware automatically triggers
  92.           an outgoing interrupt pulse at a predefined frequency (see
  93.           EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTPPPPEEEERRRRIIIIOOOODDDD ). Use EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTLLLLOOOO to stop pulse generation. This
  94.           ioctl is only available on Origin2000/200.
  95.  
  96.      EEEEIIIIIIIIOOOOCCCCSSSSQQQQUUUUAAAARRRREEEE
  97.           Begin square wave generation. The hardware automatically toggles the
  98.           output at a predefined frequency (see EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTPPPPEEEERRRRIIIIOOOODDDD ). Use
  99.           EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTLLLLOOOO to stop square wave generation. This ioctl is only
  100.           available on Origin2000/200.
  101.  
  102.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTPPPPEEEERRRRIIIIOOOODDDD
  103.           Set the period for cyclical pulse and square wave generation. The
  104.           argument is an int time value in microseconds (usec). This value
  105.           must be in the range [28-511184] inclusive and will be rounded to
  106.           the nearest multiple of 7.8 usec. This ioctl is only available on
  107.           Origin2000/200.
  108.  
  109.      EEEEIIIIIIIIOOOOCCCCGGGGEEEETTTTPPPPEEEERRRRIIIIOOOODDDD
  110.           Get the period used for cyclical pulse and square wave generation.
  111.           The argument is a pointer to an int in which to place the period
  112.           value. The period is given in microseconds. This ioctl is only
  113.           available on Origin2000/200.
  114.  
  115.      EEEEIIIIIIIIOOOOCCCCRRRREEEECCCCVVVV
  116.           Waits until an interrupt is received.  The arg is a pointer to a
  117.           structure of type
  118.  
  119.            struct eiargs {
  120.                int intval;
  121.                struct timeval timeval;
  122.            };
  123.  
  124.           which is used both for input args and a return value.
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  137.  
  138.  
  139.  
  140.      The intval field of the input args indicates whether or not to flush any
  141.      queued interrupts.  Incoming interrupts are queued via a counter which is
  142.      maintained per-process within the driver, indicating how many interrupts
  143.      have arrived but have not yet been retrieved by that process.  If intval
  144.      is set to 0 on input, the EIIOCRECV call will return immediately if there
  145.      is a queued interrupt for the calling process in the driver.  However, if
  146.      the intval member of arg is set to 1 on input, all previously queued
  147.      interrupts will be discarded; that is, the counter will be set to 0
  148.      before the call continues with normal processing.
  149.  
  150.      The timeval field of the input args indicates a timeout.  If the timeout
  151.      is 0, the call is effectively a poll.  If the tv_sec field of timeval is
  152.      -1, the call will never timeout.
  153.  
  154.      On return, intval is set to 1 if the call returned because of an
  155.      interrupt, or 0 if the call returned because of the timeout.
  156.  
  157.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTSSSSIIIIGGGG
  158.           Instructs the driver to send a signal to the calling process when
  159.           each interrupt arrives.  The arg is the integer value of the signal
  160.           to be sent.  It is up to the process to do something useful with
  161.           this signal.  Setting the signal to 0 disables this feature.  A
  162.           forked child process does not inherit this signal.
  163.  
  164.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTOOOOPPPPWWWW EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTIIIIPPPPWWWW EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTSSSSPPPPWWWW
  165.           These functions are only required for Challenge/Onyx, and are
  166.           silently ignored for all other systems.
  167.  
  168.           These functions set the value in microseconds, respectively, of the
  169.           outgoing pulsewidth, the expected incoming pulsewidth, and the
  170.           threshold beyond which an incoming pulse is deemed "stuck."  The arg
  171.           in each case is an int.  The default values are restored when the
  172.           device is closed by the last process.
  173.  
  174.           The outgoing pulsewidth determines how long the output lines are
  175.           asserted when the driver generates an outgoing interrupt.  This
  176.           value should not be set too high, since the processor busy waits
  177.           with all interrupts blocked during this time.  Likewise, too short a
  178.           pulse will not be received by the remote machine.  The value must be
  179.           in the range [2-1000].  The default is 10 microseconds.
  180.  
  181.           The expected incoming pulsewidth determines how long the interrupt
  182.           handler will wait before returning.  The interrupt handler must not
  183.           return while the input line is still asserted, otherwise multiple
  184.           interrupts are received from the same input pulse, indicating to the
  185.           driver that the line is "stuck" (see below).  The value must be in
  186.           the range [2-1000].  The default is 10 microseconds.
  187.  
  188.           The "stuck" pulsewidth defines the minimum allowable time between
  189.           distinct input pulses.  Any two pulses that arrive within this time
  190.           are considered to be the same pulse.  This is used to detect a
  191.           "stuck" input line which is always asserted.  This value must be in
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  203.  
  204.  
  205.  
  206.           the range [5-1000000].  Setting the value too low will cause a
  207.           single pulse to be processed as more than one interrupt, while
  208.           setting the value too high will limit the maximum rate at which
  209.           interrupts can be received.  The default is 500 microseconds.
  210.  
  211.      EEEEIIIIIIIIOOOOCCCCGGGGEEEETTTTOOOOPPPPWWWW EEEEIIIIIIIIOOOOCCCCGGGGEEEETTTTIIIIPPPPWWWW EEEEIIIIIIIIOOOOCCCCGGGGEEEETTTTSSSSPPPPWWWW
  212.           These functions retrieve the value in microseconds, respectively, of
  213.           the outgoing pulsewidth, the expected incoming pulsewidth, and the
  214.           threshold beyond which an incoming pulse is deemed "stuck."  See
  215.           above for descriptions of these values.  The arg in each case is a
  216.           pointer to an int in which to return the value. These values are
  217.           only variable on Challenge/Onyx. On other systems, the output and
  218.           input pulse widths will be returned as defined by the hardware, and
  219.           the stuck pulse width is always returned as zero.
  220.  
  221.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTSSSSYYYYSSSSCCCCPPPPUUUU
  222.           Sets which cpu runs system calls to the driver.  The arg is the cpu
  223.           number.  If arg is -1, system calls to the driver will run on
  224.           whatever cpu the calling process is on.  This call overrides the
  225.           built-in kernel configuration.  When the device is closed by all
  226.           processes, the configured value is restored. This ioctl is only
  227.           available on Challenge/Onyx.
  228.  
  229.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTIIIINNNNTTTTRRRRCCCCPPPPUUUU
  230.           Sets which cpu handles incoming interrupts.  The arg is the cpu
  231.           number.  This call overrides the built-in kernel configuration.
  232.           When the device is closed by all processes, the configured value is
  233.           restored. The user must be superuser or have the CAP_DEVICE_MGT
  234.           capability to assign the interrupt to a cpu which is configured as
  235.           NOINTR (see system(4)). This ioctl is only available on
  236.           Challenge/Onyx. On Origin2000/200 systems the interrupt may be
  237.           directed to a particular cpu at kernel build time only (see
  238.           system(4)).
  239.  
  240. OOOOUUUUTTTTPPPPUUUUTTTT SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN
  241.      On Challenge/Onyx systems, there are 4 output jacks and all are accessed
  242.      via the file /dev/external_int/1. All output ioctls ( EEEEIIIIIIIIOOOOCCCCSSSSTTTTRRRROOOOBBBBEEEE ,
  243.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTHHHHIIII and EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTLLLLOOOO ) take an integer argument which is a bitmask
  244.      whose 4 low order bits specify which of the 4 output jacks to operate on.
  245.      (bit 0 specifies output 0, etc).
  246.  
  247.      On Origin2000/200, there is one file in /dev/external_int per output jack
  248.      and the output ioctls take no argument. Output jack selection is
  249.      accomplished by opening the appropriate file in /dev/external_int.
  250.  
  251. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  252.      All ioctls return 0 on success, -1 on error with errno set to indicate
  253.      the error.  Possible values of errno are:
  254.  
  255.      EEEEFFFFAAAAUUUULLLLTTTT
  256.           Indicates that the caller passed an illegal address as a pointer to
  257.           return data.
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  269.  
  270.  
  271.  
  272.      EEEENNNNOOOOMMMMEEEEMMMM
  273.           Indicates that the requested operation required memory allocation,
  274.           and none was available.
  275.  
  276.      EEEEIIIINNNNVVVVAAAALLLL
  277.           Indicates an invalid parameter.
  278.  
  279.      EEEEBBBBUUUUSSSSYYYY
  280.           Is returned by EIIOCSETINTRCPU if a user-level-interrupt (ULI) is
  281.           currently registered to handle the external interrupt. If setting of
  282.           the interrupt cpu is desired, it must be done before ULI
  283.           registration.
  284.  
  285. LLLLIIIIBBBBRRRRAAAARRRRYYYY FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNNSSSS
  286.      _N_O_T_E The eicinit(), eicbusywait() and eicclear() functions are obsolete
  287.           but still provided for backward compatibility. The functions
  288.           described below are preferred.
  289.  
  290.       vvvvooooiiiidddd ****eeeeiiiicccciiiinnnniiiitttt____ffff((((iiiinnnntttt ffffdddd))));;;;
  291.           Sets up some state to allow busy waiting for interrupts. The caller
  292.           must open the device and pass in a descriptor. On success, an opaque
  293.           handle is returned which is passed to the remaining functions below.
  294.           If an error occurs, a null pointer is returned and errno is set. The
  295.           function does an implicit EIIOCENABLE. If the loopback interrupt is
  296.           desired, the caller must use the EIIOCENABLELB ioctl after the call
  297.           to eicinit_f().  _N_O_T_E Since eicinit_f() does an implicit
  298.           EIIOCENABLE, using EIIOCENABLELB causes both the internal loopback
  299.           and external interrupts to be enabled simultaneously. If the
  300.           external cable loops back to the same machine, this will cause each
  301.           interrupt to be received twice (see BUGS below). This is easily
  302.           avoided by turning off the external interrupt via EIIOCDISABLE after
  303.           the call to eicinit_f().
  304.  
  305.       iiiinnnntttt eeeeiiiiccccbbbbuuuussssyyyywwwwaaaaiiiitttt____ffff((((vvvvooooiiiidddd ****hhhhaaaannnnddddlllleeee,,,, iiiinnnntttt ssssppppiiiinnnn))));;;;
  306.           _h_a_n_d_l_e is the return value from eicinit_f(), identifying the device
  307.           to be used. If _s_p_i_n is 1, this call spins until an interrupt
  308.           arrives, then returns 1.  If spin is 0, the call immediately returns
  309.           1 if there is an interrupt queued; otherwise it returns 0.  Each
  310.           interrupt is returned only once.  This function eliminates the
  311.           overhead of a system call, but the tradeoff is that it hogs the
  312.           processor.  Interrupts are queued, so an interrupt that arrived
  313.           after the call to eicinit_f() but before this call will still be
  314.           returned.  This call returns -1 if not preceeded by eicinit_f().
  315.  
  316.       vvvvooooiiiidddd eeeeiiiicccccccclllleeeeaaaarrrr____ffff((((vvvvooooiiiidddd ****hhhhaaaannnnddddlllleeee))));;;;
  317.           _h_a_n_d_l_e is the return value from eicinit_f(), identifying the device
  318.           to be used. Any previously queued interrupts on the device are
  319.           cleared, causing eicbusywait_f() to wait until the next interrupt
  320.           arrives.
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  335.  
  336.  
  337.  
  338. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  339.      The eicinit_f() function may set errno to any of the following:
  340.  
  341.      EEEENNNNOOOOMMMMEEEEMMMM
  342.           Indicates that the kernel is short on memory.
  343.  
  344.      EEEEAAAACCCCCCCCEEEESSSS
  345.           Indicates that the descriptor passed in was not opened with O_RDONLY
  346.           permissions.
  347.  
  348. NNNNOOOOTTTTEEEE OOOONNNN IIIINNNNTTTTEEEERRRRRRRRUUUUPPPPTTTT QQQQUUUUEEEEUUUUEEEESSSS
  349.      As mentioned above, the driver maintains a queue of incoming interrupts
  350.      on a per-process basis for all processes that have the driver open. These
  351.      interrupts are dequeued via the EIIOCRECV ioctl. There is a second queue
  352.      of interrupts, maintained by library functions, which is accessed by the
  353.      eicbusywait_f() function.  Dequeuing an interrupt from one of these
  354.      queues does not dequeue it from the other.  If the process wishes to
  355.      intermix these two interfaces, it will probably be necessary to dequeue
  356.      each interrupt twice, or periodically flush one of the queues.  The
  357.      EIIOCSETSIG ioctl instructs the driver to send a signal when an interrupt
  358.      arrives, but in no way modifies queue behavior.  If the process wishes to
  359.      take advantage of the queue, the signal handler will have to manipulate
  360.      the queue with either the EIIOCRECV ioctl or the eicbusywait_f() library
  361.      routine (preferably the latter, since it avoids syscall overhead).  This
  362.      is in fact very useful since signals are not queued by the system, and
  363.      may be lost if they occur too rapidly.  Using the interrupt queue, the
  364.      signal handler can tell exactly how many interrupts have arrived even if
  365.      a signal was discarded.
  366.  
  367.      The user should note that in order for the driver to maintain the per-
  368.      process queue of interrupts which is accessed by EIIOCRECV, it must know
  369.      of the existence of the process in question. Typically, the driver first
  370.      learns of a process's existence when the process does an open() on the
  371.      device. However a process may gain access to the device without ever
  372.      calling the open() function, for example a child process inheriting a
  373.      file descriptor opened by its parent. The driver will not begin queueing
  374.      interrupts on behalf of a process until it learns of the process's
  375.      existence via the first open() or ioctl() call to the device. Any
  376.      interrupts which occur before the first of one of these calls is issued
  377.      by a process will not be queued for that process. Thus a child process
  378.      which inherited a file descriptor to the device from its parent must
  379.      issue some ioctl() call to begin interrupt queueing.
  380.  
  381. HHHHAAAARRRRDDDDWWWWAAAARRRREEEE IIIINNNNTTTTEEEERRRRFFFFAAAACCCCEEEE
  382.      The Challenge/Onyx L/XL chassis has four outgoing interrupt sockets and
  383.      two incoming interrupt sockets connected to the master IO4 board.  The
  384.      sockets are located by the label "interrupts."  The outgoing sockets,
  385.      labeled "out 0, 1, 2 and 3" are asserted, respectively, by bits 0, 1, 2,
  386.      and 3 of the EIIOCSTROBE arg.  Note that whereas the outputs may be
  387.      asserted separately, it is impossible to distinguish which input is
  388.      receiving a pulse, thus it is unimportant which input socket is used for
  389.      receiving interrupts. Origin2000/200 systems have one output and one
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  401.  
  402.  
  403.  
  404.      input jack per IO board, each pair of jacks is controlled by a separate
  405.      device file.  The jacks used are male 3-conductor 1/8 inch audio jacks
  406.      identical to those found on portable stereo headphones. _N_O_T_E: The jack
  407.      conductors are not the same for all systems. The jack conductors are as
  408.      follows:
  409.  
  410.      For Challenge/Onyx systems:
  411.  
  412.           tip  Interrupt (active low)
  413.           ring +5V
  414.           sleeve    Chassis Ground/Cable Shield
  415.  
  416.  
  417.      For Origin systems:
  418.  
  419.           tip  +5V
  420.           ring Interrupt (active low)
  421.           sleeve    Chassis Ground/Cable Shield
  422.  
  423.  
  424.      A two conductor shielded cable is used, with the two cable conductors
  425.      wired to the +5V and Interrupt jack conductors, and the sleeve connected
  426.      to the cable shield at both ends to maintain EMI integrity.
  427.  
  428.      When connecting a multitester to the jack, the common lead should be
  429.      connected to the sleeve, and the + lead should be connected to the +5V
  430.      and interrupt conductors simultaneously.  When the line is asserted, the
  431.      multitester should read 0 volts.  When the line is deasserted, the
  432.      multitester should read 5 volts.
  433.  
  434.      The input signals pass through an opto-isolator that has a damping
  435.      effect.  The input signal must be of sufficient duration to drive the
  436.      output of the opto-isolator low in order for the interrupt to be
  437.      recognized by the receiving machine.  Current experimentation shows that
  438.      the threshold is about 2.5 microseconds.  To be safe, the driver sets its
  439.      default outgoing pulse width to 10 microseconds.  Any hardware not from
  440.      Silicon Graphics that is driving this line should do the same.
  441.  
  442.           Internal driver circuit for output connector
  443.  
  444.                +5 ---/\/\/\-------- (output +5V connector)
  445.  
  446.                          ---------- (output interrupt connector)
  447.                         |           open collector driver
  448.                         |
  449.                       |/
  450.                    ---|
  451.                       |\
  452.                         v
  453.                         |
  454.                         = (ground)
  455.  
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  467.  
  468.  
  469.  
  470.           Internal receiver circuit for input connector
  471.  
  472.                (input +5V connector)  -------------
  473.                                                    |
  474.                                                    |
  475.                                                   ---
  476.                               opto isolator LED   \ /
  477.                                                   ---
  478.                                                    |
  479.                                                    |
  480.                (input interrupt connector) --------
  481.  
  482.  
  483.  
  484.      The output connector can be wired directly to the input connector, taking
  485.      care to connect the +5V output to the +5V input and the interrupt output
  486.      to the interrupt input. See above to determine which jack conductors
  487.      correspond to +5V and interrupt depending on which system is used. If
  488.      some other device is used to drive the input, it must be a +5V source
  489.      current limited with a 420ohm resistor in series, to avoid damaging the
  490.      opto isolator.
  491.  
  492. BBBBUUUUGGGGSSSS
  493.      On Origin systems, a missing inverter on the IO6 board causes the
  494.      incoming interrupt to be detected on the falling edge of the input pulse
  495.      rather than the rising edge. This should only be an issue when
  496.      simultaneously using external cabling and the internal loopback
  497.      capability, or when mixing Challenge and Origin systems. In this former
  498.      case, the internal loopback interrupt is triggered on the rising edge of
  499.      the outgoing pulse, and the external interrupt on the remote machine is
  500.      triggered on the falling edge of the incoming pulse. The delay between
  501.      these two events is the pulse width, 23.4 usec. Uniformity can be ensured
  502.      by using an external cable to loop back to the local machine rather than
  503.      using the internal loopback interrupt.
  504.  
  505.      _N_O_T_E If both internal and external loopbacks are used on the same
  506.      machine, each interrupt generated will be received twice, since the 23.4
  507.      usec interval between them is long enough for the first interrupt to be
  508.      completely serviced and cleared before the second interrupt is triggered.
  509.  
  510.      For cyclical pulse generation, the interval between interrupts is still
  511.      correct since the interval between the falling pulse edges is the same as
  512.      the interval between the rising pulse edges.
  513.  
  514.      When triggering external interrupts on both Origin and Challenge systems,
  515.      using the same pulse source, the Challenge systems will receive the
  516.      interrupt correctly on the rising edge, and the Origin systems will
  517.      receive the interrupt on the falling edge. The pulse width again
  518.      determines the interval separating interrupt detection on the two
  519.      systems.
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.